package com.ge.modules.api.controller;

import com.ge.common.annotation.AuthIgnoreApi;
import com.ge.common.annotation.LoginUserApi;
import com.ge.common.utils.PageUtils;
import com.ge.common.utils.Query;
import com.ge.common.utils.R;
import com.ge.modules.api.apiDTO.TbStoreCommentDto;
import com.ge.modules.api.service.*;
import com.ge.modules.entity.TbStoreCommentEntity;
import com.ge.modules.entity.TbStoreCommentLikeEntity;
import com.ge.modules.entity.TbStoreEntity;
import com.ge.modules.entity.TbUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;


/**
 * user端 店铺信息接口
 *
 * @author lanyonglin
 * @email www.baidu.com
 * @date 2018-04-20 17:02:44
 */
@RestController
@RequestMapping("/api/user/store")
public class TbUserStoreController {
    @Autowired
    private TbStoreService storeService;

    @Autowired
    private TbCommodityService tbCommodityService;

    @Autowired
    private TbTechnicianService technicianService;

    @Autowired
    private TbStoreCommentService tbStoreCommentService;

    @Autowired
    private TbStoreCommentLikeService tbStoreCommentLikeService;

    /**
     * 列表
     */
    @AuthIgnoreApi
    @GetMapping("/list")
    public R list(@RequestParam Map<String, Object> params) {
        //查询列表数据
        Query query = new Query(params);
        List<TbStoreEntity> storeList = storeService.queryList(query);
        int total = storeService.queryTotal(query);
        PageUtils pageUtil = new PageUtils(storeList, total, query.getLimit(), query.getPage());
        return R.ok().put("data", pageUtil);
    }


    /**
     * 查询店铺列表 不分页
     *
     * @param tbStoreEntity
     * @return
     */
    @AuthIgnoreApi
    @GetMapping("/listInfo")
    public R listInfo(TbStoreEntity tbStoreEntity) {
        List<TbStoreEntity> tbStoreEntityList = storeService.queryListObject(tbStoreEntity);
        return R.ok().put("data", tbStoreEntityList);
    }


    /**
     * 信息
     */
    @AuthIgnoreApi
    @GetMapping("/info/{storeId}")
    public R info(@PathVariable("storeId") Integer storeId) {
        try {
            //查询店铺
            TbStoreEntity tbStoreEntity = new TbStoreEntity();
            tbStoreEntity.setStoreId(storeId);
            TbStoreEntity store = storeService.queryByObject(tbStoreEntity);
            if (store == null) {
                return R.error("店铺不存在");
            }
            return R.ok().put("data", store);
        } catch (Exception e) {
            e.printStackTrace();
            return R.error();
        }

    }

    /**
     * 查询评论列表
     *
     * @param map
     * @return
     */
    @GetMapping("/storeComment")
    public R storeComment(@LoginUserApi TbUser tbUser,@RequestParam Map<String, Object> map) {
        List<TbStoreCommentEntity> tbStoreCommentEntities = tbStoreCommentService.queryList(map);
        List<TbStoreCommentDto> tbStoreCommentDtoList = new ArrayList<>();
        //循环查询是否点赞
        for (int i = 0; i < tbStoreCommentEntities.size() ; i++) {
            TbStoreCommentEntity tbStoreCommentEntity = tbStoreCommentEntities.get(i);
            TbStoreCommentDto tbStoreCommentDto = tbStoreCommentEntity.toDto();
            //查询是否点赞
            TbStoreCommentLikeEntity tbStoreCommentLikeEntity = new TbStoreCommentLikeEntity();
            tbStoreCommentLikeEntity.setUserId(tbUser.getUserId());
            tbStoreCommentLikeEntity.setCommentId(tbStoreCommentEntity.getId());
            TbStoreCommentLikeEntity storeCommentLikeEntity = tbStoreCommentLikeService.queryByObject(tbStoreCommentLikeEntity);
            if(storeCommentLikeEntity == null){
                tbStoreCommentDto.setIfLike(2);
            }else{
                tbStoreCommentDto.setIfLike(1);
            }
            tbStoreCommentDtoList.add(tbStoreCommentDto);
        }
        return R.ok().put("data",tbStoreCommentDtoList);
    }

    /**
     * 添加店铺评论
     *
     * @param tbUser
     * @param tbStoreCommentEntity
     * @return
     */
    @PostMapping("/addStoreComment")
    public R addStoreComment(@LoginUserApi TbUser tbUser, TbStoreCommentEntity tbStoreCommentEntity) {
        tbStoreCommentEntity.setUserIdMaster(tbUser.getUserId());
        tbStoreCommentEntity.setCreateTime(new Date());
        tbStoreCommentService.save(tbStoreCommentEntity);
        return R.ok();
    }

    /**
     * 添加 or 取消 评论点赞
     * @return
     */
    @PostMapping("/addStoreCommentLike")
    public R addStoreCommentLike(@LoginUserApi TbUser tbUser,Integer commentId){

        //查询是否点赞
        TbStoreCommentLikeEntity tbStoreCommentLikeEntity = new TbStoreCommentLikeEntity();
        tbStoreCommentLikeEntity.setUserId(tbUser.getUserId());
        tbStoreCommentLikeEntity.setCommentId(commentId);
        TbStoreCommentLikeEntity storeCommentLikeEntity = tbStoreCommentLikeService.queryByObject(tbStoreCommentLikeEntity);
        int type = 0;
        //如果没有点赞就添加点赞 点过了就取消点赞
        if(storeCommentLikeEntity == null){
            tbStoreCommentLikeEntity.setCreateTime(new Date());
            tbStoreCommentLikeService.save(tbStoreCommentLikeEntity);
        }else{
            tbStoreCommentLikeService.delete(storeCommentLikeEntity.getId());
            type = 1;
        }
        return R.ok().put("type",type);
    }

}
